<?php

/**
 * razred actions.
 *
 * @package    dnevnik
 * @subpackage razred
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class razredActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
      isicsBreadcrumbs::getInstance()->addItem('Razredi', 'razred/index', 'Pregled svih razreda škole, ukoliko predajete izborni predmet možete napraviti grupu klikom na znak plus ispod spiska grupa.');
      $skola_ids = $this->getUser()->getAttribute('skolas');
      if(!count($skola_ids))
        die();
      $skola_id = $skola_ids[0];
      if($request->getParameter('skola_id'))
        $skola_id = $request->getParameter('skola_id');
      $skola = DbFinder::from('Skola')->findPk($skola_id);
      $podrucnas = array();
      $podrucnas_obj = $skola->getSkolasRelatedBySkolaId();
      foreach($podrucnas_obj as $podrucna_obj)
        $podrucnas[] = $podrucna_obj->getId();

      $razreds_arr = array();
      $grupni_razreds_arr = array();
      $razred_objs = DbFinder::from('Razred')->leftJoin('Smer')->leftJoin('Profesor')->leftJoin('Profil')->leftJoin('Skola')->withColumn('Profil.Prezime', 'PrezimeProf')->withColumn('Profil.Ime', 'ImeProf')->withColumn('Smer.Tip', 'SmerTip')->withColumn('Smer.Naziv', 'SmerNaziv')->withColumn('Skola.Tip', 'SkolaTip')->withColumn('Skola.Ime', 'SkolaIme')->where('Razred.SkolaId', $skola_id)->orderBy('Razred.Razred')->orderBy('Razred.Slovo')->find();
      foreach($razred_objs as $razred_obj)
      {
          if($razred_obj->getColumn('SmerTip') == SmerPeer::$tip['redovni'])
            $razreds_arr[$razred_obj->getRazred()][] = $razred_obj;
          else if($razred_obj->getColumn('SmerTip') == SmerPeer::$tip['grupni'])
            $grupni_razreds_arr[$razred_obj->getRazred()][] = $razred_obj;
      }

      $p_razreds_arr = array();
      $p_grupni_razreds_arr = array();
      $p_razred_objs = DbFinder::from('Razred')->leftJoin('Smer')->leftJoin('Profesor')->leftJoin('Profil')->leftJoin('Skola')->withColumn('Profil.Prezime', 'PrezimeProf')->withColumn('Profil.Ime', 'ImeProf')->withColumn('Smer.Tip', 'SmerTip')->withColumn('Smer.Naziv', 'SmerNaziv')->withColumn('Skola.Tip', 'SkolaTip')->withColumn('Skola.Ime', 'SkolaIme')->where('Razred.SkolaId', 'in', $podrucnas)->orderBy('Razred.Razred')->orderBy('Razred.Slovo')->find();
      foreach($p_razred_objs as $p_razred_obj)
      {
          if($p_razred_obj->getColumn('SmerTip') == SmerPeer::$tip['redovni'])
            $p_razreds_arr[$p_razred_obj->getRazred()][] = $p_razred_obj;
          else if($p_razred_obj->getColumn('SmerTip') == SmerPeer::$tip['grupni'])
            $p_grupni_razreds_arr[$p_razred_obj->getRazred()][] = $p_razred_obj;
          else if($p_razred_obj->getColumn('SmerTip') == SmerPeer::$tip['kombinovani'])
            $p_komb_razreds_arr[$p_razred_obj->getRazred()][] = $p_razred_obj;
      }

      // Maksimalne vrednosti nizova za tabele
      $max_razreds_arr = 0;
      foreach($razreds_arr as $niz)
        if(count($niz) > $max_razreds_arr)
          $max_razreds_arr = count($niz);
      $max_grupni_razreds_arr = 0;
        foreach($grupni_razreds_arr as $niz)
          if(count($niz) > $max_grupni_razreds_arr)
            $max_grupni_razreds_arr = count($niz);
      $max_p_razreds_arr = 0;
        foreach($p_razreds_arr as $niz)
          if(count($niz) > $max_p_razreds_arr)
            $max_p_razreds_arr = count($niz);
      $max_p_grupni_razreds_arr = 0;
        foreach($p_grupni_razreds_arr as $niz)
          if(count($niz) > $max_p_razreds_arr)
            $max_p_razreds_arr = count($niz);
      $max_p_komb_razreds_arr = 0;
        if(isset($p_komb_razreds_arr))
        foreach($p_komb_razreds_arr as $niz)
          if(count($niz) > $max_p_komb_razreds_arr)
            $max_p_komb_razreds_arr = count($niz);


      $this->razrednis = array();
      $razrednis_arrs = $this->getUser()->getAttribute('razrednis');
      if(is_array($razrednis_arrs))
      {
        $razrednis = array();
        foreach($razrednis_arrs as $razred_id => $razred)
          $razrednis[] = $razred_id;
        $this->razrednis = $razrednis;
      }

      $this->skola = $skola;
      $this->podrucnas = $podrucnas;
      $this->predaje_razreds = array_keys($this->getUser()->getAttribute('razreds'));

      $this->razreds_arr = $razreds_arr;
      $this->grupni_razreds_arr = $grupni_razreds_arr;
      $this->p_razreds_arr = $p_razreds_arr;
      $this->p_grupni_razreds_arr = $p_grupni_razreds_arr;
      if(isset($p_komb_razreds_arr))
        $this->p_komb_razreds_arr = $p_komb_razreds_arr;

      $this->max_razreds_arr = $max_razreds_arr;
      $this->max_grupni_razreds_arr = $max_grupni_razreds_arr;
      $this->max_p_razreds_arr = $max_p_razreds_arr;
      $this->max_p_grupni_razreds_arr = $max_p_grupni_razreds_arr;
      $this->max_p_komb_razreds_arr = $max_p_komb_razreds_arr;
  }

  public function executePregled(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $smer = $razred->getSmer();
      if($smer->getTip() == SmerPeer::$tip['grupni'])
        isicsBreadcrumbs::getInstance()->addItem($razred.' '.$smer, 'razred/pregled?razred_id='.$request->getParameter('razred_id'), 'Pregled učenika iz datog razreda, kliknite na sliku učenika da biste upisali ocene.');
      else  isicsBreadcrumbs::getInstance()->addItem($razred, 'razred/pregled?razred_id='.$request->getParameter('razred_id'), 'Pregled učenika iz datog razreda, kliknite na sliku učenika da biste upisali ocene.');
      // Ucenici
      $this->uceniks = UcenikPeer::getJoin()->with('Roditelj')->orderBy('RedBr')->orderBy('Profil.Prezime')->orderBy('Profil.Ime')->findBy('RazredId', $razred->getId());
      if($smer->getTip() == SmerPeer::$tip['grupni'])
      {
          $this->grupa_id = $razred->getId();
          $ucenik_razreds = $razred->getUcenikRazreds();
          foreach($ucenik_razreds as $ucenik_razred)
            $uceniks_arr[] = $ucenik_razred->getUcenikId();

          $this->uceniks = UcenikPeer::getJoin()->orderBy('RedBr')->where('Id', 'in', $uceniks_arr)->find();
      }
  }

  public function executePodesavanja(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $smer = $razred->getSmer();
      if($smer->getTip() == SmerPeer::$tip['grupni'])
        isicsBreadcrumbs::getInstance()->addItem($razred.' '.$smer, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      else  isicsBreadcrumbs::getInstance()->addItem($razred, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      isicsBreadcrumbs::getInstance()->addItem('Podešavanja');

      $this->form = new RazredForm($razred);
      $this->form->offsetUnset('skola_id');
      $this->form->offsetUnset('operater_razred_list');
      $this->form->offsetUnset('smer_id');
      $this->form->offsetUnset('razred');
      $this->form->offsetUnset('slovo');

      // Rasporedi
      $raspored_tips = DbFinder::from('Raspored')->select('Tip')->where('RazredId', $request->getParameter('razred_id'))->find();
      $raspored_arr = array();
      foreach($raspored_tips as $raspored_tip)
      {
        $this->form->offsetUnset('Raspored '.$raspored_tip);

        $rasporeds = DbFinder::from('Raspored')->select(array('Id', 'Dan', 'CasP', 'Cas', 'Cas1', 'Cas2', 'Cas3', 'Cas4', 'Cas5', 'Cas6', 'Cas7', 'Cas8'))->where('RazredId', $request->getParameter('razred_id'))->where('Tip', $raspored_tip)->orderBy('Dan')->find();
        foreach($rasporeds as $raspored)
        {
          $raspored_arr[$raspored_tip][$raspored['Dan']] = $raspored;
        }
      }
      $this->predmets = $razred->getSmer()->getPredmets();
      $this->raspored_arr = $raspored_arr;

      // Ucenici
      $this->uceniks = DbFinder::from('Ucenik')->findBy('RazredId', $razred->getId());
      if($razred->getSmer()->getTip() == SmerPeer::$tip['grupni'])
      {
          $this->grupa_id = $razred->getId();
          $ucenik_razreds = $razred->getUcenikRazreds();
          foreach($ucenik_razreds as $ucenik_razred)
            $this->uceniks[] = $ucenik_razred->getUcenik();
      }

      if($request->isMethod('post'))
      {
          $this->form->bind($request->getParameter('razred'));
          if ($this->form->isValid())
          {
            $razred = $this->form->save();
          }
          else die('Form not valid!');
      }

      $this->getResponse()->addJavascript('jquery.js');
      $this->getResponse()->addJavascript('main.js');
      $this->getResponse()->addJavascript('dnevnik_skola.js');
      $this->getResponse()->addJavascript('ajaxupload.js');
  }

  public function executePodesavanjaProfesori(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $smer = $razred->getSmer();
      if($smer->getTip() == SmerPeer::$tip['grupni'])
        isicsBreadcrumbs::getInstance()->addItem($razred.' '.$smer, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      else  isicsBreadcrumbs::getInstance()->addItem($razred, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      isicsBreadcrumbs::getInstance()->addItem('Profesori');

      $this->form = new RazredForm($razred);
      $this->form->offsetUnset('skola_id');
      $this->form->offsetUnset('operater_razred_list');
      $this->form->offsetUnset('smer_id');
      $this->form->offsetUnset('razred');
      $this->form->offsetUnset('slovo');

      // Rasporedi
      $raspored_tips = DbFinder::from('Raspored')->select('Tip')->where('RazredId', $request->getParameter('razred_id'))->find();
      $raspored_arr = array();
      foreach($raspored_tips as $raspored_tip)
      {
        $this->form->offsetUnset('Raspored '.$raspored_tip);
      }

      if($request->isMethod('post'))
      {
          $this->form->bind($request->getParameter('razred'));
          if ($this->form->isValid())
          {
            $razred = $this->form->save();
          }
          else die('Form not valid!');
      }

      $this->getResponse()->addJavascript('jquery.js');
      $this->getResponse()->addJavascript('jquery-ui.js');
      $this->getResponse()->addJavascript('jquery.autocompleter.js');
      $this->getResponse()->addStyleSheet('jquery.autocompleter.css');
  }

  public function executePodesavanjaRaspored(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $smer = $razred->getSmer();
      if($smer->getTip() == SmerPeer::$tip['grupni'])
        isicsBreadcrumbs::getInstance()->addItem($razred.' '.$smer, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      else  isicsBreadcrumbs::getInstance()->addItem($razred, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      isicsBreadcrumbs::getInstance()->addItem('Raspored časova', '', 'Izaberite predmet iz padajućeg menija da promenite raspored časova. Raspored se automatski snima.<br />Izborni 1 - verska ili građansko<br />Izborni 2 - izborni jezik<br />Izborni 3 - izborni sport<br />Izborni 4 - izborni predmet');

      $raspored_tips = DbFinder::from('Raspored')->select('Tip')->distinct()->where('RazredId', $request->getParameter('razred_id'))->find();
      $raspored_arr = array();
      foreach($raspored_tips as $raspored_tip)
      {
        $rasporeds = DbFinder::from('Raspored')->select(array('Id', 'Dan', 'CasP', 'Cas', 'Cas1', 'Cas2', 'Cas3', 'Cas4', 'Cas5', 'Cas6', 'Cas7', 'Cas8'))->where('RazredId', $request->getParameter('razred_id'))->where('Tip', $raspored_tip)->orderBy('Dan')->find();
        foreach($rasporeds as $raspored)
        {
          $raspored_arr[$raspored_tip][$raspored['Dan']] = $raspored;
        }
      }
      $this->predmets = $razred->getPredmets(1, 0, 1, 'Izaberi');
      unset($this->predmets[24], $this->predmets[25]); // skloni strani i manjine
      $this->raspored_arr = $raspored_arr;
      $this->razred = $razred;
  }

  public function executePodesavanjaSlike(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $smer = $razred->getSmer();
      if($smer->getTip() == SmerPeer::$tip['grupni'])
        isicsBreadcrumbs::getInstance()->addItem($razred.' '.$smer, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      else  isicsBreadcrumbs::getInstance()->addItem($razred, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      isicsBreadcrumbs::getInstance()->addItem('Slike učenika');

      // Ucenici
      $this->uceniks = UcenikPeer::getJoin()->withColumn('Profil.Pol', 'Pol')->where('Ucenik.RazredId', $razred->getId())->orderBy('RedBr')->orderBy('Profil.Prezime')->orderBy('Profil.Ime')->find();
      if($razred->getSmer()->getTip() == SmerPeer::$tip['grupni'])
      {
          $this->grupa_id = $razred->getId();
          $ucenik_razreds = $razred->getUcenikRazreds();
          foreach($ucenik_razreds as $ucenik_razred)
            $this->uceniks[] = $ucenik_razred->getUcenik();
      }

      $this->razred = $razred;
      $this->getResponse()->addJavascript('ajaxupload.js');
  }

  public function executeChangeRaspored(sfWebRequest $request)
  {
      $params = $request->getPostParameters();
      list($cas_id_ar, $predmet_id) = each($params);
      $cas_id_exp = explode('_', $cas_id_ar);
      $cas_broj = $cas_id_exp[0];
      $cas_id = $cas_id_exp[1];

      if($predmet_id == '' or $predmet_id == 0)
        $predmet_id = NULL;
      DbFinder::from('Raspored')->where('Id', $cas_id)->set(array($cas_broj => $predmet_id), TRUE);
      return $this->renderText($request->getParameter('id').sfContext::getInstance()->getI18N()->__("Sačuvano"));
  }

  /**
  * todo planovi rada vezani za skolu i profesora
  *
  * @param sfWebRequest $request
  */
  public function executeDnevnik(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $smer = $razred->getSmer();
      if($smer->getTip() == SmerPeer::$tip['grupni'])
        isicsBreadcrumbs::getInstance()->addItem($razred.' '.$smer, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      else  isicsBreadcrumbs::getInstance()->addItem($razred, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      isicsBreadcrumbs::getInstance()->addItem('Dnevnik rada', '', 'Upišite čas, domaći zadatak i izostanak. Izostanci se daju izborom učenika i klikom na željeni čas.<br />Razredni starešina pravda časove klikom na željeni čas pored imena učenika.<br />Klikom na već opravdan čas razredni starešina može izbrisati čas.');

      // Vreme
      $nedelja = $request->getParameter('nedelja');
      if(!$nedelja) $nedelja = 0;
      $time = time() + $nedelja * 7 * 24 * 60 * 60;
      if(date('Y') == '2009')
         $week = date('W', $time) - 1;
      else if(date('Y') == '2010')
      $week = date('W', $time);

      // Upisani casovi
      $cas_dbs = DbFinder::from('Cas')->with('Domaci')->leftJoin('Domaci')->with('Predmet')->leftJoin('Predmet')->select(array('Cas.Id', 'Cas.RazredId', 'Cas.PredmetId', 'Cas.Datum', 'Cas.Cas', 'Cas.RedBr', 'Cas.Opis', 'Domaci.Id', 'Domaci.Opis', 'Predmet.PredmetKratki'))->where('Cas.RazredId', $razred->getId())->whereCustom('WEEK(Cas.Datum)=?', $week)->find();
      $cass = array();
      foreach($cas_dbs as $cas_db)
      {
          $cass[date('N', strtotime($cas_db['Cas.Datum']))][$cas_db['Cas.Cas']] = $cas_db;
      }

      // Maksimalni casovi
      $max_red_brs = array();
      $max_dbs = DbFinder::from('Cas')->select(array('Max', 'PredmetId'))->withColumn('max(Cas.RedBr)', 'Max')->where('RazredId', $razred->getId())->groupBy('PredmetId')->find();
      foreach($max_dbs as $max_db)
        $max_red_brs[$max_db['PredmetId']] = $max_db['Max'];

      // Raspored casova
      $tip = 1;
      $rasporeds = array();
      $raspored_arrs = DbFinder::from('Raspored')->select(array('CasP', 'Cas', 'Cas1', 'Cas2', 'Cas3', 'Cas4', 'Cas5', 'Cas6', 'Cas7', 'Cas8', 'Dan'))->where('RazredId', $razred->getId())->where('Tip', $tip)->find();
      foreach($raspored_arrs as $raspored_arr)
      {
          $i = -2;
          while($i++ < 8)
          {
            if($i == -1)
              $i_char = "P";
            else if($i == 0)
              $i_char = "";
            else
              $i_char = $i;

            $rasporeds[$raspored_arr['Dan']][$i] = $raspored_arr['Cas'.$i_char];
          }
      }

      $predmets = $razred->getPredmets(0, 0, 1, 'Predmet');
      // Planovi rada
      if(!($plan_skola = $razred->getSkola()->getSkolaId()))
        $plan_skola = $razred->getSkolaId();
      $plans = array();
      foreach($predmets as $predmet_id => $naziv)
      {
         if(!$predmet_id) continue;
         if(isset($max_red_brs[$predmet_id]))
           $plan_dbs = DbFinder::from('PlanRada')->select(array('RedBr', 'Opis'))->where('SkolaId', $plan_skola)->where('Razred', $razred->getRazred())->where('PredmetId', $predmet_id)->limit(7)->offset($max_red_brs[$predmet_id] - 3)->orderBy('ProfesorId')->orderBy('RedBr')->find();
         else $plan_dbs = DbFinder::from('PlanRada')->select(array('RedBr', 'Opis'))->where('SkolaId', $plan_skola)->where('Razred', $razred->getRazred())->where('PredmetId', $predmet_id)->limit(7)->orderBy('ProfesorId')->orderBy('RedBr')->find();

         if($plan_dbs)
           foreach($plan_dbs as $plan_db)
             $plans[$predmet_id][$plan_db['RedBr']] = $plan_db['Opis'];
      }

      // Izostanci
      $izostanak_dbs = DbFinder::from('Izostanak')->join('Ucenik')->withColumn('Ucenik.RedBr', 'RedBr')->join('Profil')->withColumn('Profil.Ime', 'UcenikIme')->withColumn('Profil.Prezime', 'UcenikPrezime')->where('Izostanak.RazredId', $razred->getId())->whereCustom('WEEK(Izostanak.Datum)=?', $week)->find();
      $izostanaks = array();
      foreach($izostanak_dbs as $izostanak_db)
      {
          $izostanaks[date('N', strtotime($izostanak_db->getDatum()))][$izostanak_db->getUcenikId()][$izostanak_db->getCas()] = $izostanak_db;
      }

      // Ucenik list
      $ucenik_list = $razred->getUcenikList();

      $this->predmets = $predmets;
      $this->week = $week;
      $this->cass = $cass;
      $this->nedelja = $nedelja;
      $this->razred = $razred;
      $this->rasporeds = $rasporeds;
      $this->plans = (count($plans) ? $plans : 0);
      $this->max_red_brs = $max_red_brs;
      $this->izostanaks = $izostanaks;
      $this->dani = Functions::week(date('Y', $time), $week);
      $this->ucenik_list = $ucenik_list;

      $this->getResponse()->addJavascript('jquery.js');
      $this->getResponse()->addJavascript('dnevnik_skola.js');
  }

  public function executeUnesiCas(sfWebRequest $request)
  {
     return $this->renderText(Dnevnik::unesiCas($request));
  }

  public function executeBrisiCas(sfWebRequest $request)
  {
     return $this->renderText(Dnevnik::brisiCas($request));
  }

  public function executeUnesiDomaci(sfWebRequest $request)
  {
     return $this->renderText(Dnevnik::unesiDomaci($request));
  }

  public function executeUnesiIzostanak(sfWebRequest $request)
  {
     return $this->renderText(Dnevnik::unesiIzostanak($request));
  }

  public function executePravdajIzostanak(sfWebRequest $request)
  {
     if(in_array($request->getParameter('razred_id'), array_keys($this->getUser()->getAttribute('razrednis'))))
       return $this->renderText(Dnevnik::pravdajIzostanak($request));
     else return $this->renderText('false');
  }

  public function executeBrisiIzostanak(sfWebRequest $request)
  {
     if(in_array($request->getParameter('razred_id'), array_keys($this->getUser()->getAttribute('razrednis'))))
       return $this->renderText(Dnevnik::brisiIzostanak($request));
     else return $this->renderText('false');
  }

  public function executePlanoviRadaChange(sfWebRequest $request)
  {
     $text = '';
     $plans = array();
     $razred = DbFinder::from('Razred')->findPk($request->getParameter('razred_id'));
     if(!($plan_skola = $razred->getSkola()->getSkolaId()))
       $plan_skola = $razred->getSkolaId();
     $predmet_id = $request->getParameter('predmet_id');
     $max_red_br = DbFinder::from('Cas')->select('RedBr')->where('RazredId', $razred->getId())->where('PredmetId', $predmet_id)->orderBy('RedBr', 'desc')->findOne();
     if($max_red_br)
       $plan_dbs = DbFinder::from('PlanRada')->select(array('RedBr', 'Opis'))->where('SkolaId', $plan_skola)->where('Razred', $razred->getRazred())->where('PredmetId', $predmet_id)->limit(7)->offset($max_red_br - 3)->orderBy('ProfesorId')->orderBy('RedBr')->find();
     else $plan_dbs = DbFinder::from('PlanRada')->select(array('RedBr', 'Opis'))->where('SkolaId', $plan_skola)->where('Razred', $razred->getRazred())->where('PredmetId', $predmet_id)->limit(7)->orderBy('ProfesorId')->orderBy('RedBr')->find();

     if($plan_dbs)
     {
       foreach($plan_dbs as $plan_db)
         $plans[$plan_db['RedBr']] = trim($plan_db['Opis']);

        $text .= '<select id="pla_'.$request->getParameter('dan').'_'.$request->getParameter('cas').'" name="pla_'.$request->getParameter('dan').'_'.$request->getParameter('cas').'" class="dnevnik_predmet" onchange="planoviRadaIzbor(this.id, this.value)">';
        $sel_txt = current($plans);
        foreach($plans as $rbr => $plan)
        {
          $selected = '';
          if(isset($max_red_br))
            if($rbr == ($max_red_br + 1))
            {
              $selected = ' selected="selected"';
              $sel_txt = $plan;
            }
            $text .= '<option value="'.$rbr.'"'.$selected.'>'.$rbr.' - '.$plan.'</option>';
         }
         $text .= '</select>';

        return $this->renderText($text.'-*-'.$sel_txt);
       }

       else return $this->renderText('');
  }

  public function executeGrupniUnos(sfWebRequest $request)
  {
      $razred_id = $request->getParameter('razred_id');
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $smer = $razred->getSmer();
      if($smer->getTip() == SmerPeer::$tip['grupni'])
        isicsBreadcrumbs::getInstance()->addItem($razred.' '.$smer, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      else  isicsBreadcrumbs::getInstance()->addItem($razred, 'razred/pregled?razred_id='.$request->getParameter('razred_id'));
      isicsBreadcrumbs::getInstance()->addItem('Grupni unos');

      $predmets = $razred->getPredmets();
      $predmets_arr = array();
      $predmets_arr[''] = $this->getContext()->getI18N()->__('Izaberi predmet');
      $predaje_razredu = $this->getUser()->getAttribute('razreds');
      $predaje_razredu = $predaje_razredu[$razred_id];
      foreach($predmets as $predmet_id => $predmet_naziv)
        if(in_array($predmet_id, $predaje_razredu))
          $predmets_arr[$predmet_id] = $predmet_naziv;

      $this->predmets = $predmets_arr;
  }

  public function executeGrupniDnevnik(sfWebRequest $request)
  {
      if($request->getParameter('predmet') == 0)
        die();

      $predmet = DbFinder::from('Predmet')->findPk($request->getParameter('predmet'));
      $razred = DbFinder::from('Razred')->with('Smer')->join('Smer')->findPk($request->getParameter('razred_id'));

      // obican razred
      if($razred->getSmer()->getTip() != SmerPeer::$tip['grupni'])
      {
        $ocenas = Dnevnik::getRazredPredmetOcenas($razred->getId(), $predmet->getId());

        if(in_array($predmet, $razred->getSmer()->getPredmets()) or $predmet->getId() == $razred->getJezik())
        {
          $uceniks = UcenikPeer::getJoin()->where('RazredId', $request->getParameter('razred_id'))->orderBy('RedBr')->find();
        }
        // predmet iz grupe u obicnom razredu
        else
        {
          $uceniks = DbFinder::from('Ucenik')->join('Profil')->join('UcenikRazred')->leftJoin('UcenikRazred.RazredId', 'Razred.Id')->join('Smer')->withColumn('Profil.Ime', 'Ime')->withColumn('Profil.Prezime', 'Prezime')->where('Ucenik.RazredId', $razred->getId())->where('Smer.Naziv', $predmet->getPredmet())->orderBy('RedBr')->find();
        }
      }
      // grupni razred
      else
      {
         $ocenas = Dnevnik::getGrupaPredmetOcenas($razred->getId(), $predmet->getId());
         $uceniks = DbFinder::from('Ucenik')->join('Profil')->join('UcenikRazred')->leftJoin('UcenikRazred.RazredId', 'Razred.Id')->withColumn('Profil.Ime', 'Ime')->withColumn('Profil.Prezime', 'Prezime')->where('UcenikRazred.RazredId', $razred->getId())->orderBy('RedBr')->find();
      }

      $this->period = Functions::period();
      $this->razred = $razred;
      $this->predmet = $predmet;
      $this->uceniks = $uceniks;
      $this->ocenas = $ocenas;

      if(!in_array($predmet->getId(), Functions::$opisni_predmeti[$razred->getSmer()->getNaziv()]))
        return 'Brojcano';
      else return 'Opisno';
  }

  public function executeUnosGrupnih(sfWebRequest $request)
  {
      $predmet_id = $request->getParameter('predmet_id');
      if(!$obrazlozenje = $request->getParameter('obrazlozenje'))
        $obrazlozenje = '';
      $strs = explode('_*_', $request->getParameter('str'));
      foreach($strs as $str)
      {
          $ocena_ar = explode(',', $str);
          $ocena = new Ocena();
          $ocena->setRazredId($ocena_ar[3]);
          $ocena->setPredmetId($predmet_id);
          $ocena->setPeriod($request->getParameter('period'));
          $ocena->setUcenikId($ocena_ar[0]);
          $ocena->setOcena($ocena_ar[1]);
          if($ocena_ar[2])
            $ocena->setOpis($ocena_ar[2]);
          else $ocena->setOpis($obrazlozenje);
          $ocena->save();

          Functions::sendSms($ocena_ar[0], $ocena_ar[1], 'ocena', $ocena_ar[2], $predmet_id);
      }

      return($this->renderText('Sačuvano!'));
  }

  public function executeUnosOpisnihGrupnih(sfWebRequest $request)
  {
      $predmet_id = $request->getParameter('predmet_id');
      $strs = explode('_*_', $request->getParameter('str'));
      foreach($strs as $str)
      {
          $ocena_ar = explode(',', $str);
          $ocena = new Ocena();
          $ocena->setPredmetId($predmet_id);
          $ocena->setPeriod($request->getParameter('period'));
          $ocena->setUcenikId($ocena_ar[0]);
          $ocena->setRazredId($ocena_ar[1]);
          $ocena->setOpis($ocena_ar[2]);
          $ocena->save();

          Functions::sendSms($ocena_ar[0], '', 'opisna', $ocena_ar[2], $predmet_id);
      }
      return($this->renderText('Sačuvano!'));
  }

  public function executeNovaGrupa(sfWebRequest $request)
  {
     isicsBreadcrumbs::getInstance()->addItem('Nova grupa', 'razred/novaGrupa', 'Izaberite izborni predmet, razred i odeljenje, prvih par slova imena ili prezimena profesora koji predaje i odaberite učenike koji pripadaju grupi koja se kreira.');
      $skola_id = $request->getParameter('skola_id');
      $form = new sfForm();
      $form->setWidget('predmet', new sfWidgetFormChoice(array('choices' => SmerPeer::getIzbornis())));
      $form->setWidget('razred', new sfWidgetFormChoice(array('choices' => array('Razred', 1, 2, 3, 4, 5, 6, 7, 8))));
      $form->setWidget('odeljenje', new sfWidgetFormInput());
      $form->setWidget('profesor', new sfWidgetFormPropelChoice(array('model' => 'Profesor', 'add_empty' => true, 'renderer_class' => 'sfWidgetFormPropelJQueryAutocompleter', 'renderer_options' => array(
            'model' => 'Profil',
            'url'   => '/backend.php/profesor/ajaxList?skola_id='.$skola_id,
      ))));
      $form->setWidget('ucenici', new sfWidgetFormChoiceMany(array('choices' => UcenikPeer::getUcenikGrupaList($skola_id))));
      $form->setValidator('ucenici', new sfValidatorPropelChoiceMany(array('model' => 'Ucenik', 'required' => false)));

      if ($request->isMethod('post'))
      {
         $form->bind();
         $profesor = (int) $request->getParameter('profesor');
         $razred_br = (int) $request->getParameter('razred');
         $slovo = (int) $request->getParameter('odeljenje');
         if($form->isValid() and $profesor and $razred_br and $slovo)
         {
             $smer = DbFinder::from('Smer')->findPk($request->getParameter('predmet'));
             $predmet = $smer->getPredmetIzbornog();

             $razred = new Razred();
             $razred->setSkolaId($skola_id);
             $razred->setSmerId($request->getParameter('predmet'));
             $razred->setProfesorId($profesor);
             $razred->setRazred($razred_br);
             $razred->setSlovo($request->getParameter('odeljenje'));
             $razred->save();

             foreach($request->getParameter('ucenici') as $ucenik_id)
             {
                 $u_r = new UcenikRazred();
                 $u_r->setRazredId($razred->getId());
                 $u_r->setUcenikId($ucenik_id);
                 $u_r->save();
             }

             $p_r = new PredmetRazred();
             $p_r->setRazredId($razred->getId());
             $p_r->setPredmetId($predmet->getId());
             $p_r->setProfesorId($profesor);
             $p_r->save();

             $razredi_sesija = $this->getUser()->getAttribute('razreds');
             $razredi_sesija[$razred->getId()][] = $predmet->getId();
             $this->getUser()->setAttribute('razreds', $razredi_sesija);

             $rs_sesija = $this->getUser()->getAttribute('razrednis');
             $smer = $razred->getSmer();
             $rs_sesija[$razred->getId()] = array('Razred' => $razred->getRazred(), 'Slovo' => $razred->getSlovo(), 'Smer' => $smer->getNaziv(), 'Tip' => $smer->getTip());
             $this->getUser()->setAttribute('razrednis', $rs_sesija);

             $this->redirect('razred/index');
         }

         else if(!($profesor))
           $this->error = 'Niste upisali profesora!';
         else if(!($razred_br))
           $this->error = 'Niste upisali razred!';
         else if(!($slovo))
           $this->error = 'Odeljenje mora biti broj između 1 i 255!';
      }

      $this->form = $form;
  }

  public function executeObavestenja(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->findPk($request->getParameter('razred_id'));
      $ucenik_dbs = UcenikPeer::getJoin()->where('Razred.Id', $request->getParameter('razred_id'))->orderBy('RedBr')->find();
      $uceniks = array();
      foreach($ucenik_dbs as $ucenik_db)
        $uceniks[$ucenik_db->getId()] = $ucenik_db->getRedBr().'. '.mb_substr($ucenik_db->joinIme(), 0, 15, 'UTF-8');

      $this->razred = $razred;
      $this->uceniks = $uceniks;
  }

  public function executeSendMail(sfWebRequest $request)
  {
      $obavestenje = new Obavestenje();
      $obavestenje->setSkolaId($request->getParameter('skola_id'));
      $obavestenje->setUcenikIds($request->getParameter('ucenik_ids'));
      $obavestenje->setNaslov($request->getParameter('naslov'));
      $obavestenje->setContent($request->getParameter('content'));
      $obavestenje->save();

      $ucenik_ids = explode('||', $request->getParameter('ucenik_ids'));
      foreach($ucenik_ids as $ucenik_id)
         Functions::sendSms($ucenik_id, $request->getParameter('naslov'), 'obavestenje', $request->getParameter('content'));

      return $this->renderText("Poruka je poslata!");
  }

  public function executePrint(sfWebRequest $request)
  {
     define('FPDF_FONTPATH', '/home/dnevnik/public_html/font/');
     //define('FPDF_FONTPATH', 'C:\wamp\www\dnevnik\web\font\\');

     $uceniks = DbFinder::from('Ucenik')->
                leftJoin('Ucenik.Id', 'Profil.Id')->
                leftJoin('Ucenik.RoditeljId', 'Roditelj.Id')->
                leftJoin('Ucenik.RazredId', 'Razred.Id')->
                leftJoin('Profil RodProfil', 'Roditelj.Id', 'RodProfil.Id')->
                select(array('Ucenik.RedBr', 'Profil.Prezime', 'Profil.Ime', 'Razred.Razred', 'Razred.Slovo', 'Profil.Adresa', 'RodProfil.Username', 'RodProfil.Mobilni'))->
                where('Ucenik.RazredId', $request->getParameter('razred_id'))->
                orderBy('Ucenik.RedBr')->
                find();

     $pdf = new FPDF('P', 'pt');
     $pdf->SetMargins(0,0,0);
     $pdf->AddFont('Arial', '', 'arial_normal.php');
     $pdf->SetFont('Arial', '', 12);

     $pdf->AddPage();

     $pdf->Cell(20, 20, iconv('UTF-8', 'Windows-1250', 'RB'), 'LBRT', 0, 'L');
     $pdf->Cell(100, 20, iconv('UTF-8', 'Windows-1250', 'Ime učenika'), 'LBRT', 0, 'L');
     $pdf->Cell(50, 20, iconv('UTF-8', 'Windows-1250', 'Razred'), 'LBRT', 0, 'L');
     $pdf->Cell(140, 20, iconv('UTF-8', 'Windows-1250', 'Adresa'), 'LBRT', 0, 'L');
     $pdf->Cell(80, 20, iconv('UTF-8', 'Windows-1250', 'Username'), 'LBRT', 0, 'L');
     $pdf->Cell(90, 20, iconv('UTF-8', 'Windows-1250', 'Mobilni telefon'), 'LBRT', 0, 'L');
     $pdf->Cell(110, 20, iconv('UTF-8', 'Windows-1250', 'Brat/sestra'), 'LBRT', 0, 'L');

     $pdf->Ln();

     foreach($uceniks as $ucenik)
     {
       $ime = $ucenik['Profil.Prezime'].' '.$ucenik['Profil.Ime'];
       if(mb_strlen($ime, 'UTF-8') > 16)
         $ime = mb_substr($ime, 0, 16).'.';
       $adresa = $ucenik['Profil.Adresa'];
       if(mb_strlen($adresa, 'UTF-8') > 25)
         $adresa = mb_substr($adresa, 0, 25).'.';

       $pdf->Cell(20, 20, iconv('UTF-8', 'Windows-1250', $ucenik['Ucenik.RedBr']), 'LBRT', 0, 'L');
       $pdf->Cell(100, 20, iconv('UTF-8', 'Windows-1250', $ime), 'LBRT', 0, 'L');
       $pdf->Cell(50, 20, iconv('UTF-8', 'Windows-1250', RazredPeer::razredRimski($ucenik['Razred.Razred']).' - '.$ucenik['Razred.Slovo']), 'LBRT', 0, 'L');
       $pdf->Cell(140, 20, iconv('UTF-8', 'Windows-1250', $adresa), 'LBRT', 0, 'L');
       $pdf->Cell(80, 20, iconv('UTF-8', 'Windows-1250', $ucenik['RodProfil.Username']), 'LBRT', 0, 'L');
       $pdf->Cell(90, 20, iconv('UTF-8', 'Windows-1250', $ucenik['RodProfil.Mobilni']), 'LBRT', 0, 'L');
       $pdf->Cell(110, 20, iconv('UTF-8', 'Windows-1250', ''), 'LBRT', 0, 'L');
       $pdf->Ln();
     }

     $this->getResponse()->setContentType('application/pdf');
     $this->getResponse()->setHttpHeader('Pragma', 'no-cache');
     $this->getResponse()->setHttpHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0');

     $pdf->Output();
     return sfView::NONE;
  }

}